#include "texturemanager.h"

using namespace std;

//única instancia
TextureManager *TextureManager::instance=NULL;




TextureManager::TextureManager(){


}

const sf::Image &TextureManager::LoadTexture(const std::string &name){

	//Crea un objeto imagen
	sf::Image i;

	//lo agrega al mapa, sin buscar la textura, para ganar velocidad	
	pair<map<string, sf::Image>::iterator,bool> p = textures.insert(pair<string,sf::Image>(name,i));

	//ahora buscamos la textura y la asociamos con el puntero
	sf::Image &img=p.first->second;

	if(!img.LoadFromFile(name))
	{
		cout<<"ERROR: TextureManager::LoadTexture(): No se encontro archivo: "<<name<<endl;
	}

	return img;
	
}


TextureManager &TextureManager::GetInstance(){

	if(instance==NULL)
	{
		instance=new TextureManager();
	}
	return *instance;

} 


const sf::Image &TextureManager::GetTexture(const std::string &name){
//BUsca la textura en el mapa	
	map<string, sf::Image>::iterator p= textures.find(name);

	if(p !=textures.end())
	{//Si está, la devuelve	
		return p->second;
	}
	else
	{//Si no, la carga y la devuelve	
		return LoadTexture(name);
	}

}

const sf::Image &TextureManager::operator[](const std::string &name){
	return GetTexture(name);
}

void TextureManager::UnloadTexture(const std::string &name){
	textures.erase(name);
}




